<template>
  <div ref="chart" style="width:400px;height:300px" />
</template>

<script>
// 图表类需求的通用demo写法
// 1. 正确安装
// 2. 在组件中准备一个有效的有宽高的dom元素节点
// 3. methods单独去写一个初始化的方法[dom的获取 参数的准备]
// 4. 选择mounted钩子函数中做图标的初始化调用

// 按需：如果性能要求 按需导入
// 为什么图表的参数不放在data里面：data中只要你放进去数据不管对象嵌套层次多深都会进行响应式的初始化
// 又因为图表类的参数一般都比较庞大 非常影响组件初始化的性能 所以不建议把参数放到data

import * as echarts from 'echarts'

// 更新的思路：watch监听一下数据的变化 -> chart.setOption()
export default {
  props: {
    indicator: {
      type: Array,
      default: () => {
        return []
      }
    }
  },
  watch: {
    indicator() {
      console.log('数据更新')
      // 在这里调用chart.setOption
      // 如何获取图表实例？ 把图表实例挂载到this 共享
      // 使用新的参数替换老的参数
      this.myChart.setOption({
        ...this.option,
        radar: {
          indicator: this.indicator
        }
      })
    }
  },
  mounted() {
    this.initChart()
  },
  methods: {
    // 初始化的方法
    initChart() {
      // vue获取一个原生的dom节点  ref
      // 以原生dom完成图表的实例化
      this.myChart = echarts.init(this.$refs.chart)
      // 准备图表的参数
      this.option = {
        radar: {
          // shape: 'circle',
          indicator: this.indicator
        },
        series: [
          {
            name: 'Budget vs spending',
            type: 'radar',
            data: [
              {
                value: [4200, 3000, 20000, 35000, 50000, 18000],
                name: 'Allocated Budget'
              },
              {
                value: [5000, 14000, 28000, 26000, 42000, 21000],
                name: 'Actual Spending'
              }
            ]
          }
        ]
      }
      // 使用必要的参数完成图表的数据渲染
      this.option && this.myChart.setOption(this.option)
    }
  }
}
</script>
